package ejb.com.bbva.cbm.service.ejb;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import oracle.jdbc.driver.OracleTypes;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Service;

import cbm.commons.Conexion;
import cbm.commons.UtilitarioFunciones;
import ejb.cbm.commons.JdbcHelper;
import ejb.com.bbva.cbm.dominio.MontoDenominacion;
import ejb.com.bbva.cbm.dominio.Oficina;
import ejb.com.bbva.cbm.service.ReporteService;
import ejb.com.bbva.cbm.util.CacheDatos;
import ejb.com.bbva.cbm.util.ExcelUtils;
import ejb.com.bbva.cbm.util.Listado;
import ejb.com.bbva.cbm.util.Parametro;
import ejb.com.bbva.cbm.util.SQLUtil;
import ejb.com.bbva.cbm.util.voucher.DatosVoucherOperacionCaja;

@Service("reporteService")
public class ReporteServiceBean extends HibernateDaoSupport implements ReporteService {
	
	

	@Autowired
	public ReporteServiceBean(SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
	}


	public List<Oficina> listarOficinas() 		throws Exception {
			String sql="select o from Oficina order by o.nombre asc";
			Query q=getSession().createQuery(sql);
		return q.list();
	}
	
	
	public void generarReporteTransaccionesSignificativas(Parametro parametro)	throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_TRANS_SIGNIFICATIVAS(?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("origen"));	
			ctm.setObject(5, parametro.get("login"));
			ctm.registerOutParameter(6, OracleTypes.CURSOR);
			ctm.execute();
			rst =(ResultSet)ctm.getObject(6);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
	}
	public int contarReporteTransaccionesSignificativas(Parametro parametro)	throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		int row=0;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_TRANS_SIGNIFICATIVAS_COUNT(?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("origen"));			
			ctm.setObject(5, parametro.get("login"));
			ctm.registerOutParameter(6, OracleTypes.INTEGER);
			ctm.execute();
			row=ctm.getInt(6);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return row;
		}
	public Listado listarReporteTransaccionesSignificativas(Parametro parametro)throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst=null;
		Listado listado=new Listado();
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_TRANS_SIGNIFICATIVAS_LIST(?,?,?,?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("origen"));
			ctm.setObject(5, parametro.get("p_inicio"));
			ctm.setObject(6, parametro.get("p_fin"));	
			ctm.setObject(7, parametro.get("login"));
			ctm.registerOutParameter(8, OracleTypes.CURSOR);
			ctm.execute();
			ctm.execute();
			rst =(ResultSet)ctm.getObject(8);		
			listado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return listado;
	}	
	
	public void generarReporteOperaciones(Parametro parametro)					throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_OPERACIONES(?,?,?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("oficina"));
			ctm.setObject(3, parametro.get("terminal"));			
			ctm.setObject(4, parametro.get("login"));
			ctm.setObject(5, parametro.get("historico"));
			ctm.setObject(6, parametro.get("fechaInicio"));
			ctm.setObject(7, parametro.get("fechaFin"));
			ctm.registerOutParameter(8, OracleTypes.CURSOR);
			ctm.execute();
			rst =(ResultSet)ctm.getObject(8);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
	}
	public ArrayList<Object[]> contarReporteOperaciones(Parametro parametro) 	throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst=null;
		ArrayList<Object[]> data;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_OPERACIONES_COUNT(?,?,?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("oficina"));
			ctm.setObject(3, parametro.get("terminal"));
			ctm.setObject(4, parametro.get("login"));
			ctm.setObject(5, parametro.get("historico"));
			ctm.setObject(6, parametro.get("fechaInicio"));
			ctm.setObject(7, parametro.get("fechaFin"));
			ctm.registerOutParameter(8, OracleTypes.CURSOR);
			ctm.execute();
			rst=(ResultSet)ctm.getObject(8);			 
			data=SQLUtil.obtenerDataGenerico(rst);	
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return data;
		
	}
	public Listado listarReporteOperaciones(Parametro parametro) 				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst=null;
		Listado lstResultado=new Listado();
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_OPERACIONES_LIST(?,?,?,?,?,?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("oficina"));
			ctm.setObject(3, parametro.get("terminal"));			
			ctm.setObject(4, parametro.get("p_inicio"));
			ctm.setObject(5, parametro.get("p_fin"));
			ctm.setObject(6, parametro.get("login"));
			ctm.setObject(7, parametro.get("historico"));
			ctm.setObject(8, parametro.get("fechaInicio"));
			ctm.setObject(9, parametro.get("fechaFin"));
			ctm.registerOutParameter(10, OracleTypes.CURSOR);
			ctm.execute();
			ctm.execute();
			rst =(ResultSet)ctm.getObject(10);			
			lstResultado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return lstResultado;
	}	

	public void generarReporteTarjetasBloqueadas(Parametro parametro)			throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();		
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_TARJETAS_BLOQUEADAS(?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("nroTarjeta"));
			ctm.setObject(2, parametro.get("tipoTarjeta"));
			ctm.setObject(3, parametro.get("cliente"));
			ctm.setObject(4, parametro.get("oficina"));
			ctm.setObject(5, parametro.get("login"));			
			ctm.registerOutParameter(6, OracleTypes.CURSOR);
			ctm.execute();
			rst =(ResultSet)ctm.getObject(6);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
	}	
	public int contarReporteTarjetasBloqueadas(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		int row=0;
		try{		
			cnn = Conexion.getConnection();		
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_TARJETAS_BLOQUEADAS_COUNT(?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("nroTarjeta"));
			ctm.setObject(2, parametro.get("tipoTarjeta"));
			ctm.setObject(3, parametro.get("cliente"));
			ctm.setObject(4, parametro.get("oficina"));			
			ctm.setObject(5, parametro.get("login"));
			ctm.registerOutParameter(6, OracleTypes.INTEGER);
			ctm.execute();
			row=ctm.getInt(6);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return row;
	}
	public Listado listarReporteTarjetasBloqueadas(Parametro parametro)			throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		Listado lstResultado=new Listado();
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_TARJETAS_BLOQUEADAS_LIST(?,?,?,?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("nroTarjeta"));
			ctm.setObject(2, parametro.get("tipoTarjeta"));
			ctm.setObject(3, parametro.get("cliente"));
			ctm.setObject(4, parametro.get("oficina"));
			ctm.setObject(5, parametro.get("p_inicio"));
			ctm.setObject(6, parametro.get("p_fin"));			
			ctm.setObject(7, parametro.get("login"));
			ctm.registerOutParameter(8, OracleTypes.CURSOR);;
			ctm.execute();
			rst =(ResultSet)ctm.getObject(8);			
			lstResultado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return lstResultado;
		}
	
	public void generarReporteLogTransacciones(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_LOG_TRANSACCIONES(?,?,?,?,?,?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("cuenta"));
			ctm.setObject(5, parametro.get("nroTarjeta"));
			ctm.setObject(6, parametro.get("nroCheque"));			
			ctm.setObject(7, parametro.get("login"));
			ctm.setObject(8, parametro.get("historico"));
			ctm.setObject(9, parametro.get("fechaInicio"));
			ctm.setObject(10, parametro.get("fechaFin"));
			ctm.registerOutParameter(11, OracleTypes.CURSOR);
			ctm.execute();
			rst =(ResultSet)ctm.getObject(11);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}		
	}

	public int contarReporteLogTransacciones(Parametro parametro) 				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		int row=0;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_LOG_TRANSACCIONES_COUNT(?,?,?,?,?,?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("cuenta"));
			ctm.setObject(5, parametro.get("nroTarjeta"));
			ctm.setObject(6, parametro.get("nroCheque"));			
			ctm.setObject(7, parametro.get("login"));
			ctm.setObject(8, parametro.get("historico"));
			ctm.setObject(9, parametro.get("fechaInicio"));
			ctm.setObject(10, parametro.get("fechaFin"));
			ctm.registerOutParameter(11, OracleTypes.INTEGER);
			ctm.execute();
			row=ctm.getInt(11);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return row;
	}
	public Listado listarReporteLogTransacciones(Parametro parametro)			throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		Listado lstResultado=new Listado();
		try{
			cnn = Conexion.getConnection();			
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_LOG_TRANSACCIONES_LIST(?,?,?,?,?,?,?,?,?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("cuenta"));
			ctm.setObject(5, parametro.get("nroTarjeta"));
			ctm.setObject(6, parametro.get("nroCheque"));
			ctm.setObject(7, parametro.get("p_inicio"));
			ctm.setObject(8, parametro.get("p_fin"));			
			ctm.setObject(9, parametro.get("login"));
			ctm.setObject(10, parametro.get("historico"));
			ctm.setObject(11, parametro.get("fechaInicio"));
			ctm.setObject(12, parametro.get("fechaFin"));
			ctm.registerOutParameter(13, OracleTypes.CURSOR);;
			ctm.execute();
			rst =(ResultSet)ctm.getObject(13);
			lstResultado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return lstResultado;
		}
	
	public void generarReporteLogAuditoria(Parametro parametro)					throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();		
			UtilitarioFunciones.getParameter(parametro);
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_LOG_AUDITORIA(?,?,?,?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("nroOperacion"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("terminal"));			
			ctm.setObject(5, parametro.get("usuario"));		
			ctm.setObject(6, parametro.get("historico"));
			ctm.setObject(7, parametro.get("fechaInicio"));
			ctm.setObject(8, parametro.get("fechaFin"));
			ctm.registerOutParameter(9, OracleTypes.CURSOR);
			ctm.execute();
			rst =(ResultSet)ctm.getObject(9);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
	}
	public int contarReporteLogAuditoria(Parametro parametro) 					throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		int row=0;
		try{
			cnn = Conexion.getConnection();
			UtilitarioFunciones.getParameter(parametro);
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_LOG_AUDITORIA_COUNT(?,?,?,?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("nroOperacion"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("terminal"));			
			ctm.setObject(5, parametro.get("usuario"));
			ctm.setObject(6, parametro.get("historico"));
			ctm.setObject(7, parametro.get("fechaInicio"));
			ctm.setObject(8, parametro.get("fechaFin"));
			ctm.registerOutParameter(9, OracleTypes.INTEGER);
			ctm.execute();
			row=ctm.getInt(9);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return row;
	}
	public Listado listarReporteLogAuditoria(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		Listado lstResultado=new Listado();
		try{
			cnn = Conexion.getConnection();
			UtilitarioFunciones.getParameter(parametro);
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_LOG_AUDITORIA_LIST(?,?,?,?,?,?,?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("operacion"));
			ctm.setObject(2, parametro.get("nroOperacion"));
			ctm.setObject(3, parametro.get("oficina"));
			ctm.setObject(4, parametro.get("terminal"));
			ctm.setObject(5, parametro.get("p_inicio"));
			ctm.setObject(6, parametro.get("p_fin"));			
			ctm.setObject(7, parametro.get("usuario"));
			ctm.setObject(8, parametro.get("historico"));
			ctm.setObject(9, parametro.get("fechaInicio"));
			ctm.setObject(10, parametro.get("fechaFin"));
			ctm.registerOutParameter(11, OracleTypes.CURSOR);;
			ctm.execute();
			rst =(ResultSet)ctm.getObject(11);
			lstResultado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return lstResultado;
		}

	
	public void generarReporteSituacionCaja(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_SITUACION_CAJA(?,?,?,?)}");
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2, parametro.get("divisa"));			
			ctm.setObject(3, parametro.get("login"));
			ctm.registerOutParameter(4, OracleTypes.CURSOR);
			ctm.execute();
			rst =(ResultSet)ctm.getObject(4);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
	}
	public int contarReporteSituacionCaja(Parametro parametro) 					throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		int row=0;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_SITUACION_CAJA_COUNT(?,?,?,?)}");
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2, parametro.get("divisa"));		
			ctm.setObject(3, parametro.get("login"));
			ctm.registerOutParameter(4, OracleTypes.INTEGER);;
			ctm.execute();
			row=ctm.getInt(4);		
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return row;
	}	
	public Listado listarReporteSituacionCaja(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		Listado lstResultado=new Listado();
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_SITUACION_CAJA_LIST(?,?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("p_inicio"));
			ctm.setObject(4, parametro.get("p_fin"));	
			ctm.setObject(5, parametro.get("login"));
			ctm.registerOutParameter(6, OracleTypes.CURSOR);;
			ctm.execute();
			rst =(ResultSet)ctm.getObject(6);			
			lstResultado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return lstResultado;
		}

	public void generarReporteFaltanteSobrante(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();		
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_FALTANTES_SOBRANTES(?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2, parametro.get("terminal"));
			ctm.setObject(3, parametro.get("motivo"));
			ctm.setObject(4, parametro.get("divisa"));	
			ctm.setObject(5, parametro.get("login"));			
			ctm.registerOutParameter(6, OracleTypes.CURSOR);
			ctm.execute();
			rst =(ResultSet)ctm.getObject(6);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
	}
	public int contarReporteFaltanteSobrante(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		int row =0;
		try{
			cnn = Conexion.getConnection();		
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_FALTANTES_SOBRANTES_COUNT(?,?,?,?,?,?)}");		
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2, parametro.get("terminal"));
			ctm.setObject(3, parametro.get("motivo"));
			ctm.setObject(4, parametro.get("divisa"));
			ctm.setObject(5, parametro.get("login"));			
			ctm.registerOutParameter(6, OracleTypes.INTEGER);
			ctm.execute();
			row =ctm.getInt(6);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return row;
		}
	public Listado listarReporteFaltanteSobrante(Parametro parametro)			throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		Listado lstResultado=new Listado();
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_FALTANTES_SOBRANTES_LIST(?,?,?,?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2, parametro.get("terminal"));
			ctm.setObject(3, parametro.get("motivo"));
			ctm.setObject(4, parametro.get("divisa"));			
			ctm.setObject(5, parametro.get("p_inicio"));
			ctm.setObject(6, parametro.get("p_fin"));	
			ctm.setObject(7, parametro.get("login"));
			ctm.registerOutParameter(8, OracleTypes.CURSOR);;
			ctm.execute();
			rst =(ResultSet)ctm.getObject(8);			
			lstResultado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return lstResultado;
		}

	public void generarReporteRechazoOPS(Parametro parametro)					throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_RECHAZO_OPS(?,?,?,?)}");
			ctm.setObject(1, parametro.get("tipoMovimiento"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("login"));
			ctm.registerOutParameter(4, OracleTypes.CURSOR);
			ctm.execute();
			rst =(ResultSet)ctm.getObject(4);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
	}
	public int contarReporteRechazoOPS(Parametro parametro) 					throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		int row =0;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_RECHAZO_OPS_COUNT(?,?,?,?)}");
			ctm.setObject(1, parametro.get("tipoMovimiento"));
			ctm.setObject(2, parametro.get("divisa"));			
			ctm.setObject(3, parametro.get("login"));
			ctm.registerOutParameter(4, OracleTypes.INTEGER);;
			ctm.execute();
			row =ctm.getInt(4);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return row;
	}
	public Listado listarReporteRechazoOPS(Parametro parametro)					throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		Listado lstResultado=new Listado();
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_RECHAZO_OPS_LIST(?,?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("tipoMovimiento"));
			ctm.setObject(2, parametro.get("divisa"));
			ctm.setObject(3, parametro.get("p_inicio"));
			ctm.setObject(4, parametro.get("p_fin"));			
			ctm.setObject(5, parametro.get("login"));
			ctm.registerOutParameter(6, OracleTypes.CURSOR);;
			ctm.execute();
			rst =(ResultSet)ctm.getObject(6);			
			lstResultado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return lstResultado;
		}

	public void generarReporteEstadoOficina(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_ESTADO_OFICINA(?,?,?)}");
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2, parametro.get("estadoOficina"));			
			ctm.registerOutParameter(3, OracleTypes.CURSOR);;			
			ctm.execute();
			rst =(ResultSet)ctm.getObject(3);
			ExcelUtils.generarArchivo(parametro.getDatosExportacion(), rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
	}	
	public int contarReporteEstadoOficina(Parametro parametro) 					throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		int numero =0;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_ESTADO_OFICINA_COUNT(?,?,?)}");			
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2,parametro.get("estadoOficina"));
			ctm.registerOutParameter(3, OracleTypes.INTEGER);;
			ctm.execute();
			numero=ctm.getInt(3);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm);}
		return numero;
	}
	public Listado listarReporteEstadoOficina(Parametro parametro)				throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		Listado lstResultado=new Listado();
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_ESTADO_OFICINA_LIST(?,?,?,?,?)}");
			ctm.setObject(1, parametro.get("oficina"));
			ctm.setObject(2, parametro.get("p_inicio"));
			ctm.setObject(3, parametro.get("p_fin"));	
			ctm.setObject(4,parametro.get("estadoOficina"));
			ctm.registerOutParameter(5, OracleTypes.CURSOR);;
			ctm.execute();
			rst =(ResultSet)ctm.getObject(5);			
			lstResultado=SQLUtil.obtenerListadoGenerico(rst);
		}catch (Exception e) {throw e;}
		finally{JdbcHelper.close(cnn, ctm, rst);}
		return lstResultado;
		}


	public HashMap<String, Object> detalleDepositoEfectivo(
			HashMap<String, Object> parametro) throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_DETALLE_DEPOSITO_EFECTIVO(?,?,?)}");
			ctm.setObject(1, parametro.get("codigoOperacion"));
			ctm.setObject(2, parametro.get("historico"));
			ctm.registerOutParameter(3, OracleTypes.CURSOR);
			ctm.execute();
			rst=(ResultSet)ctm.getObject(3);
			return SQLUtil.obtenerData(rst);
		}catch (Exception e) {
			throw e;
		}finally{
			JdbcHelper.close(cnn, ctm, rst);
		}		
	}


	public HashMap<String, Object> detallePagoCuentaTarjetaCredito(
			HashMap<String, Object> parametro) throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_DETALLE_PAGO_CTA_TARJ_CRE(?,?,?)}");
			ctm.setObject(1, parametro.get("codigoOperacion"));
			ctm.setObject(2, parametro.get("historico"));
			ctm.registerOutParameter(3, OracleTypes.CURSOR);
			ctm.execute();
			rst=(ResultSet)ctm.getObject(3);
			return SQLUtil.obtenerData(rst);
		}catch (Exception e) {
			throw e;
		}finally{
			JdbcHelper.close(cnn, ctm, rst);
		}
	}


	public HashMap<String, Object> detalleRetiroEfectivo(
			HashMap<String, Object> parametro) throws Exception {
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_DETALLE_RETIRO_EFECTIVO(?,?,?)}");
			ctm.setObject(1, parametro.get("codigoOperacion"));
			ctm.setObject(2, parametro.get("historico"));
			ctm.registerOutParameter(3, OracleTypes.CURSOR);
			ctm.execute();
			rst=(ResultSet)ctm.getObject(3);
			return SQLUtil.obtenerData(rst);
		}catch (Exception e) {
			throw e;
		}finally{
			JdbcHelper.close(cnn, ctm, rst);
		}
	}
	public HashMap<String,Object> detalleBloqueoTarjeta(HashMap<String,Object> parametro)throws Exception{
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_DETALLE_TARJETA_BLOQUEO(?,?,?)}");
			ctm.setObject(1, parametro.get("codigoOperacion"));
			ctm.setObject(2, parametro.get("historico"));
			ctm.registerOutParameter(3, OracleTypes.CURSOR);
			ctm.execute();
			rst=(ResultSet)ctm.getObject(3);
			return SQLUtil.obtenerData(rst);
		}catch (Exception e) {
			throw e;
		}finally{
			JdbcHelper.close(cnn, ctm, rst);
		}
	}
	public HashMap<String,Object> detallePagoCheque(HashMap<String,Object> parametro)throws Exception{
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rst = null;
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_PAGO_CHEQUE(?,?,?)}");
			ctm.setObject(1, parametro.get("codigoOperacion"));
			ctm.setObject(2, parametro.get("historico"));
			ctm.registerOutParameter(3, OracleTypes.CURSOR);
			ctm.execute();
			rst=(ResultSet)ctm.getObject(3);
			return SQLUtil.obtenerData(rst);
		}catch (Exception e) {
			throw e;
		}finally{
			JdbcHelper.close(cnn, ctm, rst);
		}
	}
	public Object[] detalleDepositoCheque(HashMap<String,Object> parametro)throws Exception{
		Connection cnn = null;
		CallableStatement ctm = null;
		ResultSet rstMaestro = null;
		ResultSet rstDetalle = null;
		Object[] salida=new Object[2];
		try{
			cnn = Conexion.getConnection();
			ctm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_DEPOSITO_CHEQUE(?,?,?,?)}");
			ctm.setObject(1, parametro.get("codigoOperacion"));
			ctm.setObject(2, parametro.get("historico"));
			ctm.registerOutParameter(3, OracleTypes.CURSOR);
			ctm.registerOutParameter(4, OracleTypes.CURSOR);
			ctm.execute();
			rstMaestro=(ResultSet)ctm.getObject(3);
			rstDetalle=(ResultSet)ctm.getObject(4);
			salida[0]=SQLUtil.obtenerData(rstMaestro);
			salida[1]=SQLUtil.obtenerDataGenericoHashMap(rstDetalle);
			return salida;
		}catch (Exception e) {
			throw e;
		}finally{
			rstMaestro.close();
			JdbcHelper.close(cnn, ctm, rstDetalle);
		}
	}
	
	
	public DatosVoucherOperacionCaja obtenerDatosOperacionCaja(HashMap<String, Object> parametro) throws Exception
    {
    	DatosVoucherOperacionCaja voucher = new DatosVoucherOperacionCaja();
    	
    	Connection cnn = null;
    	CallableStatement stm = null;
    	ResultSet rst = null;
    	
    	try {
    		cnn = Conexion.getConnection();
			stm = cnn.prepareCall("{call CONNEG.PQ_REPORTE.SP_OPERACION_CAJA(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
			stm.setObject(1, parametro.get("codigoOperacion"));
			stm.setObject(2, parametro.get("historico"));
			stm.registerOutParameter(3, oracle.jdbc.OracleTypes.INTEGER);
			stm.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
			stm.registerOutParameter(5, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(6, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(7, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(8, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(9, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(10, oracle.jdbc.OracleTypes.DATE);
			stm.registerOutParameter(11, oracle.jdbc.OracleTypes.DOUBLE);
			stm.registerOutParameter(12, oracle.jdbc.OracleTypes.DOUBLE);
			stm.registerOutParameter(13, oracle.jdbc.OracleTypes.DOUBLE);
			stm.registerOutParameter(14, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(15, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(16, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(17, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(18, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(19, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(20, oracle.jdbc.OracleTypes.VARCHAR);
			stm.registerOutParameter(21, oracle.jdbc.OracleTypes.CURSOR);
		
			stm.execute();
			
			voucher.setTipoTransaccionId(stm.getInt(3));
			voucher.setTipoCajaId(stm.getInt(4));
			voucher.setOficinaId(stm.getString(5));
			voucher.setOficinaNombre(stm.getString(6));
			voucher.setTerminalId(stm.getString(7));
			voucher.setDivisaId(stm.getString(8));
			voucher.setDivisaSimbolo(CacheDatos.getInstance().getSimboloDivisaPorId(voucher.getDivisaId()));
			voucher.setFechaOperacion(stm.getDate(10));
			voucher.setMontoTotal(stm.getDouble(11));
			voucher.setMontoDeteriorado(stm.getDouble(12));
			voucher.setPatronCalidad(stm.getDouble(13));
			voucher.setTerminalTraspaso(stm.getString(14));
			//voucher.setT
			voucher.setUsuarioAutorizacion(stm.getString(15));
			voucher.setDescripcionAutorizacion(stm.getString(16));
			voucher.setMotivoAutorizacion(stm.getString(17));
			voucher.setUsuarioExtorno(stm.getString(18));
			voucher.setDescripcionExtorno(stm.getString(19));
			voucher.setMotivoExtorno(stm.getString(20));
			//voucher.setTipoVoucher();
			rst = (ResultSet)stm.getObject(21);
			
			List<MontoDenominacion> montos = new ArrayList<MontoDenominacion>();
			//Recorremos las cajas
    		while (rst.next()) {
				MontoDenominacion monto = new MontoDenominacion();
				monto.setTipoId(rst.getInt("tipoId"));
				monto.setValorIngresado(rst.getDouble("valorIngresado"));
				monto.setValorNumerico(rst.getDouble("valorNumerico"));
				monto.setValorTexto(rst.getString("valorTexto"));
				montos.add(monto);
			}
    		voucher.setMontosDenominacion(montos);
    		voucher.setTiposDenominacion(CacheDatos.getInstance().getTiposDenominacion());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JdbcHelper.close(cnn,stm,rst);
		}
    	
    	return voucher;
    }

}
